// ImageHide.h
//
// 图像隐藏（ImageHide）
// 功能说明：实现二值图隐藏于正常图片中（以数据最低位实现）。

#ifndef __IMAGEHIDE_H__ 
#define __IMAGEHIDE_H__ 

#include "Image.h"

// 类：ImageHide（二值图像隐藏）
// 继承自：无
// 根据给定的载体图像和要隐藏的二值图像进行二值隐藏处理，由二值图像得到
// 一个待隐藏的 01 序列，由 01 序列设置原图像的灰度值的最低位。
class ImageHide {

public:

    // 构造函数：ImageHide
    // 无参数版本的构造函数，因为该类没有成员变量，所以该构造函数为空。
    // 没有需要设置默认值的成员变量。
    __host__ __device__
    ImageHide() {
    // 无任何操作。
    }

    // Host 成员方法：imageHide(二值图像隐藏处理)
    // 根据给定的载体图像和要隐藏的二值图像进行二值隐藏处理，
    // 这是一个 Out-Place 形式的处理。
    // 本二值图像的灰度值只有 0 和 255，可以把所有灰度值看成一个 01 序列，
    // 隐藏这个二值序列，如果是0，则载体图像的灰度值最低位置 0，否则最低位置 1。
    __host__ int            // 返回值：函数是否正确执行，若函数正确执行，返回
                            // NO_ERROR。
    imageHide(
            Image *inimg1,  // 原图像
            Image *inimg2,  // 待隐藏的二值图
            Image *outimg   // 二值图隐藏于原图像后新生成的图像
    );

    // Host 成员方法：imageHide(二值图像隐藏处理)
    // 根据给定的载体图像和要隐藏的二值图像进行二值隐藏处理，
    // 这是一个 In-Place 形式的处理。
    // 本二值图像的灰度值只有 0 和 255，可以把所有灰度值看成一个 01 序列，
    // 隐藏这个二值序列，如果是0，则载体图像的灰度值最低位置 0，否则最低位置 1。
    __host__ int            // 返回值：函数是否正确执行，若函数正确执行，返回
                            // NO_ERROR。
    imageHide(
            Image *inimg1,  // 原图像
            Image *inimg2   // 待隐藏的二值图
    );
};

#endif

